/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: DELL
 * Date: 2022-08-17
 * Time: 17:37
 */

//usb 接口

interface IUSB {
    //接口中得每一个方法都是public得抽象方法即隐式指定为 public abstract
    public abstract void openDevice();

    void closeDevice();  //默认是public 权限

/*    private void fun(){
        //只能是 public abstract修饰 其他修饰符不行
    }*/

    double a = 3.14; //接口中得变量被隐式指定为public static final变量

    public static final int x = 10;

/*    public IUSB(){
        //接口中不能有构造方法
    }

    {
        //不能有实例代码块
    }

    static {
        //不能有静态代码块
    }*/


}

//鼠标类实现SUB接口
//创建接口时，接口命一般以大写字母 I 开头
//接口名一般用形容词
//接口中得方法和属性一般不加任何修饰符号
class Mouse implements IUSB {
    //必须要有一个类来实现接口，重写接口中得所有方法
    @Override
    public void openDevice() {
        System.out.println("打开鼠标");
    }

    @Override
    public void closeDevice() {
        System.out.println("关闭鼠标");
    }

    public void click() {
        System.out.println("点击鼠标");
    }
}

//键盘类实现USB接口
class KeyBorad implements IUSB {
    @Override
    public void openDevice() {
        System.out.println("打开键盘");
    }

    @Override
    public void closeDevice() {
        System.out.println("关闭键盘");
    }

    public void input() {
        System.out.println("键盘输入");
    }
}

class Computer {
    public void powerOn() {
        System.out.println("打开笔记本电脑");
    }

    public void powerOff() {
        System.out.println("关闭笔记本电脑");
    }

    //使用USB功能
    public void sueDevice(IUSB iusb) {
        iusb.openDevice();
        if (iusb instanceof Mouse) {
            Mouse mouse = (Mouse) iusb; //利用 iusb强转创建鼠标类来使用鼠标
            mouse.click();
        } else if (iusb instanceof KeyBorad) {
            KeyBorad keyBorad = (KeyBorad) iusb; // 利用 iusb强转创建键盘类来使用键盘
            keyBorad.input();
        }
        //使用完以后关闭设备
        iusb.closeDevice();
    }
}

public class Test1_0817 {

    public static void main1(String[] args) {
        Computer computer = new Computer();

        //打开设备
        computer.powerOn();

        //使用鼠标设备
        computer.sueDevice(new Mouse()); //匿名对象，向上转型？

        //使用键盘设备
        computer.sueDevice(new KeyBorad());

        //关闭设备
        computer.powerOff();
    }

    public static void main(String[] args) {

        //1.接口类型是一种引用类型，但是不能直接new接口的对象
        //是抽象得，无法实例化
        //IUSB iusb = new IUSB();

        //2.
    }
}
